using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Web.Profile;
using ClickSocial.Framework;
using ClickSocial.Components;
using ClickSocial.Entities;

namespace ClickSocial.Admin
{
    public partial class Event : System.Web.UI.UserControl
    {
        private string m_evento_id="0";
        private PerfilComun m_perfil;

        public string EventoID
        {
            get
            {
                m_evento_id = ViewState["EventoID"] as string ?? string.Empty;
                return m_evento_id;
            }
            set
            {
                m_evento_id = value;
                ViewState["EventoID"] = m_evento_id;
            }
        }

        public string VisibilidadEvento
        {
            get { return rdlistVisibilidad.SelectedValue; }            
        }

        //public event EventHandler EventChanged;

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            m_perfil = Context.Profile as PerfilComun;

            lblPrecio.Visible = m_perfil.UsaPrecio;
            pnlPrecio.Visible = m_perfil.UsaPrecio;
            calEvento.SelectedDate = DateTime.Now;

        }

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                lblUserFotografo.Visible = (Context.User.IsInRole(Global.RolesApp.Host) && (EventoID != "0"));
                ddlUsersFotografo.Visible = (Context.User.IsInRole(Global.RolesApp.Host) && (EventoID != "0"));

                if (EventoID != "0")//Editar evento
                {
                    btnSalvarCerrar.Visible = Context.User.IsInRole(Global.RolesApp.Fotografo);
                    lblTitulo.Text = "Editar evento";
                    txtNombre.Enabled = false;
                    lblTapa.Visible = true;
                    ddlTapa.Visible = true;

                    //Evento EventoMapper = new Evento();
                    EventoInfo oEvento = Evento.GetOne(long.Parse(EventoID));

                    txtNombre.Text = oEvento.Nombre;
                    
                    txtDescripcion.Text = oEvento.Descripcion;
                    
                    if (m_perfil.UsaPrecio)
                        txtPrecio.Text = oEvento.Precio.ToString();
                    
                    calEvento.SelectedDate = oEvento.Fecha;
                    
                    ListItem visi_item = rdlistVisibilidad.Items.FindByValue(oEvento.Visibilidad.ToString());
                    if (visi_item != null)
                        rdlistVisibilidad.SelectedIndex = rdlistVisibilidad.Items.IndexOf(visi_item);

                    lblPass.Visible =oEvento.Visibilidad.Equals(3);
                    txtPass.Visible = oEvento.Visibilidad.Equals(3);
                    txtPass.Text = oEvento.Clave; 

                    ddlTapa.DataTextField = "Archivo";
                    ddlTapa.DataValueField = "Archivo";
                    ddlTapa.DataSource= Fotos.GetFotos(oEvento);
                    ddlTapa.DataBind();

                    ListItem tapa_item = ddlTapa.Items.FindByValue(oEvento.Tapa);
                    if (tapa_item != null)
                        ddlTapa.SelectedIndex = ddlTapa.Items.IndexOf(tapa_item);

                    if (Context.User.IsInRole(Global.RolesApp.Host))
                    {
                        ddlUsersFotografo.DataSource = Roles.GetUsersInRole(Global.RolesApp.Fotografo);
                        ddlUsersFotografo.DataBind();
                        ListItem foto_item = ddlUsersFotografo.Items.FindByText(oEvento.Fotografo);
                        if (foto_item != null)
                            ddlUsersFotografo.SelectedIndex = ddlUsersFotografo.Items.IndexOf(foto_item);
                    }
                    
                }
                else
                {
                    lblTitulo.Text = "Nuevo evento";
                    txtNombre.Enabled = true;
                    lblTapa.Visible = false;
                    ddlTapa.Visible = false;
                    lblPass.Visible = rdlistVisibilidad.SelectedValue.Equals("3");
                    txtPass.Visible = rdlistVisibilidad.SelectedValue.Equals("3");

                }

            }
        }

        public bool Save()
        {            
            if (txtNombre.Text == string.Empty || txtPrecio.Text == string.Empty || txtDescripcion.Text==string.Empty)
                return false;

            if (m_evento_id == "0")//Nuevo evento
            {
                string BaseDirUser = string.Format("{0}\\{1}", Application["BaseDir"], Context.User.Identity.Name);
                
                long evento_id = 0;
                DateTime fecha = (calEvento.SelectedDate > DateTime.MinValue ? calEvento.SelectedDate : DateTime.Now);

                Evento.Insert(txtNombre.Text, txtDescripcion.Text, int.Parse(rdlistVisibilidad.SelectedValue), double.Parse(txtPrecio.Text), fecha, Context.User.Identity.Name, out evento_id, txtPass.Text);                    
                                
                if (evento_id != 0)
                {
                    EventoID = evento_id.ToString();

                    //EventChanged(this, new EventArgs());//lanza el evento que indica que se ha creado un nuevo evento.

                    string DirEvent = string.Format("{0}\\{1}", BaseDirUser, EventoID);// Path.Combine(BaseDirUser, Path.GetFileName(EventoID));

                    Directory.CreateDirectory(DirEvent);

                    return true;    
                }
                else
                {
                    Mensaje("El evento ya existe.");

                    return false;
                }
            }
            else //Editar evento
            {
                
                EventoInfo oEvento = Evento.GetOne(long.Parse(m_evento_id));

                oEvento.Descripcion = txtDescripcion.Text;
                oEvento.Fecha = calEvento.SelectedDate;
                oEvento.Visibilidad = int.Parse(rdlistVisibilidad.SelectedValue);
                oEvento.Tapa = ddlTapa.SelectedValue;

                if (oEvento.Visibilidad == 3)
                {
                    oEvento.Clave = txtPass.Text; 
                }

                if (m_perfil.UsaPrecio)
                {
                    oEvento.Precio = double.Parse(txtPrecio.Text);
                }
                
                if (Context.User.IsInRole(Global.RolesApp.Host))
                {
                    if (ddlUsersFotografo.Items.Count > 0)
                    {
                        if (oEvento.Fotografo != ddlUsersFotografo.SelectedItem.Text)
                        {                            
                         
                            string source_dir_event = string.Format("{0}\\{1}\\{2}", Application["BaseDir"], oEvento.Fotografo, oEvento.EventoID.ToString());
                            string dest_dir_event = string.Format("{0}\\{1}\\{2}", Application["BaseDir"], ddlUsersFotografo.SelectedItem.Text, oEvento.EventoID.ToString());

                            if (Directory.Exists(source_dir_event) && Directory.Exists(dest_dir_event))
                            {
                                if (source_dir_event != dest_dir_event)
                                    Directory.Move(source_dir_event, dest_dir_event);                                
                            }

                            oEvento.Fotografo = ddlUsersFotografo.SelectedItem.Text;
                        }
                    }
                }

                Evento.Update(oEvento);
                
                //EventChanged(this, new EventArgs());

                return (oEvento != null);
            }
        }

        private void Mensaje(string msg)
        {
            pnlMensaje.Visible = true;
            lblErrorMensaje.Text = msg; 
        }

        protected void btnSalvarCerrar_Click(object sender, EventArgs e)
        {
            if (!Save())
            {
                Mensaje("ha ocurrido un error");
            }
            else
            {
                Response.Redirect("~/Admin/MyEvents.aspx");
            }
        }

        protected void rdlistVisibilidad_SelectedIndexChanged(object sender, EventArgs e)
        {
            lblPass.Visible = rdlistVisibilidad.SelectedValue.Equals("3");
            txtPass.Visible = rdlistVisibilidad.SelectedValue.Equals("3");

        }

    }
}